home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / library / extend / file_sel.s < prev    next >
Text File  |  1998-05-23  |  4KB  |  159 lines

  1. ;------------------------------------------------------------------------------
  2. ; Method name : -
  3. ; Asm label   : GWVA_FILE_SELECTOR
  4. ; Description : Affiche le selecteur de fichier GEM
  5. ;
  6. ; in  : a0.l = pointeur sur le texte d'invitation (terminé par un 0.b) : 35 chars max.
  7. ; in  : a1.l = pointeur sur le masque de choix (terminé par un 0.b)
  8. ; in  : a2.l = pointeur sur le pathname complet de l'ancienne sélection ou 0.l sinon
  9. ; out : a0.l = pointeur sur le nom de fichier (terminé par un 0.b)
  10. ; out : a1.l = pointeur sur le chemin (terminé par un 0.b)
  11. ; out : a2.l = pointeur sur le pathname complet (terminé par un 0.b)
  12. ; out : d0.w = code retour du fsel (0 si annule, <0 pour erreur, >0 pour OK)
  13. ;
  14. ; 15/03/98 : Création
  15. ;------------------------------------------------------------------------------
  16. GWVA_FILE_SELECTOR:
  17.  
  18. ;    lea texte,a0        ; 35 chars max.
  19. ;    lea mask,a1            ; 18 caracteres max
  20. ;    lea oldpathname,a2        ; A:\TEMP\ ou #0.l
  21. ;    bsr GWVA_FILE_SELECTOR
  22. ;    tst d0
  23. ;    beq.s annule
  24. ;    bmi.s erreur_gemdos
  25. ;     -> a0 : nom du fichier
  26. ;    -> a1 : drive:path\ du fichier
  27. ;    -> a2 : drive:path\filename.ext
  28.  
  29.     ifd MDL_COLORS
  30.     save.l a0-a2
  31.     lea GWVA_ROOT_TMP_PALETTE,a0
  32.     bsr GWVA_ROOT_STORE_VDI_PALETTE
  33.     bsr GWVA_ROOT_SET_DESK_PALETTE
  34.     load.l a0-a2
  35.     endc    ; ifd MDL_COLORS
  36.  
  37.     cmp.l #0,a2
  38.     bne.s .old_path_given
  39.  
  40. .old_path_not_given:
  41.  
  42.         ;---------
  43.  
  44.     ; S'il n'y a pas de path, on le reconstruit
  45.  
  46.     save.l a0-a1
  47.  
  48.     DGETDRV
  49.     add.b #'A',d0
  50.     lea GWVA_FILE_FSEL_DISK_PATH,a2
  51.     move.b d0,(a2)+
  52.     move.b #':',(a2)+    ; A: ou B: ...
  53.     save.l a2
  54.     DGETPATH #0,(a2)
  55.     load.l a2
  56. .trouv_0:    tst.b (a2)+
  57.     bne.s .trouv_0    ; on rajoute \ à la fin et un 0.b
  58.     move.w #'\'*256,-1(a2)
  59.  
  60.     load.l a0/a1
  61.  
  62.     COPY_STRING_0 a1,a2    ; on ajoute le masque
  63.     bra.s .call_fsel
  64.  
  65.         ;---------
  66.  
  67. .old_path_given:
  68.     tst.b (a2)
  69.     beq.s .old_path_not_given
  70.  
  71.     lea GWVA_FILE_FSEL_DISK_PATH,a3
  72.     COPY_STRING_0 a2,a3    ; on recopie le path
  73.  
  74. .find_a:    cmp.b #'\',-(a3)
  75.     bne.s .find_a
  76.     lea 1(a3),a3    ; on remonte au dernier \
  77.  
  78.     save.l a3
  79.     lea GWVA_FILE_FSEL_FILENAME,a4
  80.     COPY_STRING_0 a3,a4    ; on recopie le nom de fichier
  81.     load.l a3
  82.  
  83.     COPY_STRING_0 a1,a3    ; à la place on met le masque
  84.  
  85. .call_fsel:    fsel_exinput #GWVA_FILE_FSEL_DISK_PATH,#GWVA_FILE_FSEL_FILENAME,a0
  86.  
  87.     tst.w d0
  88.     beq .fsel_failed
  89.  
  90.     move.w int_out+2,d0    ; 'ANNULE','CONFIRME'
  91.  
  92.     lea GWVA_FILE_FSEL_DISK_PATH,a0
  93. .pas0:    tst.b (a0)+
  94.     bne.s .pas0
  95. .pas_trouv_d:
  96.     cmpi.b #'\',-(a0)
  97.     beq.s .found_slash
  98.     cmpi.b #':',(a0)
  99.     bne.s .pas_trouv_d
  100.     addq.l #1,a0
  101.     move.b #'\',(a0)        ; root
  102. .found_slash:clr.b 1(a0)        ; chemin fini par \ 0.b
  103.  
  104. *    lea GWVA_FILE_FSEL_DISK_PATH,a0    ; impossible en théorie
  105. *    cmpi.b #':',1(a0)        ; ??
  106. *    bne.s .pas_driv        ; ??
  107.  
  108.     save.w d0
  109.     lea GWVA_FILE_FSEL_DISK_PATH,a0
  110.     bsr GWVA_SET_PATH
  111.     move d0,d1
  112.     load.w d0
  113.  
  114.     tst d1
  115.     beq.s .no_problem
  116.  
  117.     move d1,d0
  118.     bra.s .fin_fsel
  119. .no_problem:
  120.  
  121. *    lea GWVA_FILE_FSEL_FILENAME,a0
  122. *    tst.b (a0)
  123. *    bne.s .o_k        ; si plante ouvrir n'importe (le 1er)
  124. *    move.l #'*.*'*256,(a0)    ; *.* 0
  125. *.o_k:
  126.  
  127.     lea GWVA_FILE_FSEL_DISK_PATH,a1
  128.     lea GWVA_FILE_FSEL_FILE_PATHNAME,a2
  129.     COPY_STRING_0 a1,a2
  130.     lea -1(a2),a2
  131.     lea GWVA_FILE_FSEL_FILENAME,a0
  132.     COPY_STRING_0 a0,a2
  133.  
  134.     lea GWVA_FILE_FSEL_FILENAME,a0
  135.     lea GWVA_FILE_FSEL_DISK_PATH,a1
  136.     lea GWVA_FILE_FSEL_FILE_PATHNAME,a2
  137.  
  138. .fin_fsel:
  139. .fsel_failed:
  140.     ifd MDL_COLORS
  141.  
  142.     save.l d0/a0-a2
  143.     lea GWVA_ROOT_TMP_PALETTE,a0
  144.     bsr GWVA_ROOT_SET_VDI_PALETTE
  145.     load.l d0/a0-a2
  146.  
  147.     endc    ; ifd MDL_COLORS
  148.  
  149.     rts
  150.  
  151.         ;----------------------------------
  152.  
  153.  BSS
  154. GWVA_FILE_FSEL_DISK_PATH:    ds.b GWVA_ROOT_MAX_PATH_LENGTH
  155. GWVA_FILE_FSEL_FILE_PATHNAME:    ds.b GWVA_ROOT_MAX_PATH_LENGTH
  156. GWVA_FILE_FSEL_FILENAME:    ds.b GWVA_ROOT_MAX_PATH_LENGTH    ; normalement 8+1+3+1, sauf avec les noms étendus, alors ...
  157.  even
  158.  TEXT
  159.